#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>
//int main(){
//  pid_t id = fork();
//
//  if(id == 0){
//    //child
//    int count = 5;
//    while(count--){
//      printf("i am child,my pid is:%d ,my ppid is:%d\n",getpid(),getppid());
//      sleep(1);
//    }
//  }
//  else{
//    printf("father is waiting\n");
//    //对子进程的退出信息不关心，&status设置为null即可
//    //五秒钟后子进程退出
//    sleep(10);
//    pid_t waitid = wait(NULL);
//    printf("father wait %d success\n",waitid);
//    sleep(2);
//    printf("father is quit\n");
//  }
//  return 0;
//}

//int main(){
//  pid_t id[5];
//
//  int count = 0;
//  while(count<6){
//    pid_t a = fork(); //循环创建6个线程
//   //不能直接用id[count]去接收(两个返回值)
//
//    if(a == 0){
//      printf("child is running,pid is:%d!ppid is:%d\n",getpid(),getppid());
//      sleep(1);
//      exit(-1);
//    }
//    else{
//      id[count] = a;
//      ++count;
//      sleep(1);
//    }
//  }
//  //printf("father is waiting\n");
//  sleep(1);
//  for(int i = 0;i<6;++i){
//    printf("father is waiting\n");
//    printf("child is quit!pid is:%d\n",waitpid(id[i],NULL,0));
//    sleep(1);
//  }
//  return 0;
//}
//

//非阻塞等待

//int main(){
//  pid_t id = fork();
//  if(id == 0){
//    int count =5;
//    while(count--){
//      printf("child is running pid is:%d\n",getpid());
//      sleep(1);
//    }
//    exit(1);
//  }
//  else{
//    pid_t ret = 0;
//    do{
//      ret = waitpid(-1,NULL,WNOHANG);
//      if(ret == 0){
//        printf("child is running!\n");
//      }
//      sleep(1);
//    }while(ret == 0);
//  }
//return 0;
//}
//
//进程替换函数
int main(int argc,char* argv[],char* env[]){
  pid_t id = fork();
  if(id == 0){
    //child
    while(1){
      printf("i am child pid is:%d\n",getpid());
      sleep(1);
      //execl("/usr/bin/ls","ls","-l","-i",NULL);
      //char* argv[]={"ls","-l","-i",NULL};
     // execv("/usr/bin/ls",argv);
      //execlp("ls","ls","-l","-i",NULL);
      char* argp[]={"ls","-l","-i",NULL};
      //execvp("ls",argp);
      execve("/usr/bin/ls",argp,env);
    }
  }
  else{
    sleep(5);
    pid_t waitid = wait(NULL);
    printf("father wait success:%d\n",waitid);
  }
  return 0;
}
